/*
 * @Description:
 * @Version: 2.0
 * @Autor: zss
 * @Date: 2025-01-08 16:22:38
 * @LastEditors: zss
 * @LastEditTime: 2025-05-22 18:20:10
 */
import Vue from 'vue';
// /*import {} from '@/types'*/
/*
 * props
 */
export namespace N_cStph {
  /**
   * 槽体参数限制接口
   * 用于定义各种参数的上下限和单位
   */
  export interface TankParamLimit {
    min: number; // 参数最小值
    max: number; // 参数最大值
    unit: string; // 参数单位，如 °C、%、A、V 等
  }

  export interface ParaDetail {
    code: string;
    conversionRate: number;
    value: boolean | number;
  }

  /**
   * 槽体参数配置接口
   * 定义槽体的所有可监控参数及其限制
   */
  export interface TankParams {
    // 阳极抖动
    anodeShake?: ParaDetail;
    // 挂组id
    hangGroupID: ParaDetail;
    workpieceNum: ParaDetail; // 工件号
    setTime: ParaDetail; // 设定时间
    workTime: ParaDetail; // 工作计时
    conductivity?: ParaDetail; // 电导率
    temperature?: ParaDetail; // 温度值
    temperatureLimit?: TankParamLimit; // 温度限制
    liquidLevel: ParaDetail; // 液位值（0-1之间）
    levelLimit: TankParamLimit; // 液位限制
    current?: ParaDetail; // 电流值
    currentLimit?: TankParamLimit; // 电流限制
    voltage?: ParaDetail; // 电压值
    voltageLimit?: TankParamLimit; // 电压限制
    ph?: ParaDetail; // pH值
    phLimit?: TankParamLimit; // pH值限制
    // 接液开关
    liquidConSwitch: ParaDetail;
    // 倒水开关
    dischargeSwitch: ParaDetail;
    // 门盖开关
    doorSwitch?: ParaDetail;
    // 高液位
    highLiquidLevel?: ParaDetail;
    // 低液位
    lowLiquidLevel?: ParaDetail;
    // 温度下限
    tempRangeLower?: ParaDetail;
    // 液位上限
    liquidLevelUpper?: ParaDetail;
    // 液位下限
    liquidLevelLower?: ParaDetail;
    // 是否关闭
    isClose?: ParaDetail;
  }

  /**
   * 槽体配置接口
   * 定义槽体的完整属性
   */
  export interface TankConfig {
    id: number; // 槽体唯一标识
    name: string; // 槽体名称
    workName: string; // 工位名称
    width: number; // 槽体宽度（像素）
    height: number; // 槽体高度（像素）
    depth: number; // 槽体深度（用于3D效果）
    position: {
      // 槽体位置
      x: number; // 横坐标
      y: number; // 纵坐标
    };
    liquid: {
      // 槽内液体属性
      name: string; // 液体名称
      color: string; // 液体颜色（CSS颜色值）
      level?: number; // 液位
      temperature?: number; // 温度
    };
    params: TankParams; // 槽体参数配置
    status: 'working' | 'idle' | 'error' | 'closed' | 'cache'; // 槽体状态：工作中/空闲/错误/关闭/缓存位
    rows: Array<any>;
    tanksPerRow: number; // 每行槽体数量
    railHeights: Array<number>; // 每行轨道高度
    workpieces: Array<any>; // 工件列表
  }

  /**
   * 工件配置接口
   * 定义工件的完整属性
   */
  export interface WorkpieceConfig {
    id: number; // 工件唯一标识
    name: string; // 工件名称
    width: number; // 工件宽度
    height: number; // 工件高度
    position: {
      // 工件位置
      x: number;
      y: number;
    };
    targetY?: number; // 目标位置（用于移动）
    status: 'waiting' | 'processing' | 'finished'; // 工件状态
    currentTankId?: number; // 当前所在槽体ID
  }
  /**
   * 行车配置接口
   * 定义行车的完整属性
   */
  export interface CraneConfig {
    id: number; // 行车唯一标识
    name: string; // 行车名称
    position: {
      // 当前位置
      x: number;
      y: number;
    };
    displayPosition?: {
      // 显示位置（可能与实际位置不同，用于动画）
      x: number;
      y: number;
    };
    width: number; // 行车宽度
    height: number; // 行车高度
    status: 'idle' | 'moving' | 'loading' | 'unloading'; // 行车状态
    workRange: {
      // 工作范围
      start: number; // 起始位置
      end: number; // 结束位置
    };
    safetyDistance: number; // 安全距离（与其他行车的最小距离）
    collisionWarning?: boolean; // 碰撞警告标志
    load?: WorkpieceConfig; // 当前载荷（工件）
    targetPosition?: {
      // 目标位置（用于移动）
      x: number;
      y: number;
    };
  }

  /**
   * 行配置接口
   * 定义生产线每一行的属性
   */
  export interface RowConfig {
    y: number; // 行的纵坐标
    railHeight: number; // 轨道高度
    crane: CraneConfig; // 行上的行车配置
    startIndex: number; // 该行起始槽体索引
    endIndex: number; // 该行结束槽体索引
  }

  /**
   * 生产线配置接口
   * 定义整个生产线的完整配置
   */
  export interface ProductionLineConfig {
    id: string; // 生产线唯一标识
    name: string; // 生产线名称
    tankGap: number; // 槽体间距
    rowGap: number; // 行间距
    startPosition: {
      // 起始位置
      x: number;
      y: number;
    };
    cranes: CraneConfig[]; // 行车配置数组
    tanks: TankConfig[]; // 槽体配置数组
    rows: RowConfig[]; // 行配置数组
    tanksPerRow: number; // 每行槽体数量
    railHeights: number[]; // 轨道高度数组
    workpieces: WorkpieceConfig[]; // 工件配置数组
  }

  /**
   * 碰撞警告事件接口
   * 定义行车碰撞警告的属性
   */
  export interface CollisionWarningEvent {
    craneId: number; // 触发警告的行车ID
    otherCraneId: number; // 可能发生碰撞的另一个行车ID
    distance: number; // 两车间距离
    timestamp: number; // 警告时间戳
  }

  /**
   * 槽体动画配置接口
   */
  export interface TankAnimation {
    tankId: number; // 槽体ID
    startTime: number; // 动画开始时间
    duration: number; // 动画持续时间
    continuous?: boolean; // 是否持续动画
    craneId: number; // 触发闪烁的行车ID
  }

  // 定义按钮配置接口
  export interface ButtonConfig {
    x: number;
    y: number;
    width: number;
    height: number;
    label: string;
    onClick: () => void;
  }

  export interface I_taskInfo {
    doneCount: number;
    workCount: number;
    waitCount: number;
  }

  export interface I_recTankInfo {
    id: number;
    tankName: string;
    params: TankParams;
  }

  export interface I_writeResp {
    success: boolean;
    msg: string;
    data: null;
  }

  export interface I_writeCodeRes {
    ecDetCode: string;
    value: string;
  }

  export interface I_writeRes {
    writeList: I_writeCodeRes[];
  }

  // eslint-disable-next-line no-shadow
  export enum V_ecDatatype {
    Float32 = 0,
    Float64,
    Int8,
    Int16,
    Int32,
    Int64,
    UInt8,
    UInt16,
    UInt32,
    UInt64,
    DateTime,
    Date,
    Time,
    Bool,
    String,
    Bit
  }

  // eslint-disable-next-line no-shadow
  export enum V_ecBoxType {
    NOTSET = 0,
    MITSUBISHI_PLC_Q,
    SIEMENS_PLC_S7_1500,
    SIEMENS_PLC_S7_200_SMART
  }

  export interface I_readResp {
    success: boolean;
    msg: string;
    data: {
      [key: string]: {
        dataType?: V_ecDatatype;
        controllerType?: V_ecBoxType;
        v: any;
        err?: string;
      };
    };
  }

  export interface buttonInfo {
    type: string;
    key: string;
    title: string;
    show: boolean;
    ecCode: string;
  }

  export interface formInfo {
    type: string;
    btnType?: string;
    key: string;
    icon: string;
    title: string;
    ecCode: string;
    value: string | number;
    disabled: boolean;
  }
  export interface alarmInfo {
    alarmId: string;
    alarmRowID: string;
    content: string;
    equipFunName: string;
    alarmCode: string;
  }

  export interface setInfo {
    label?: string;
    code: string;
    value: number | boolean;
  }

  export interface craneParams {
    // 实工位
    actualStation: setInfo;
    // 预工位
    preStation: setInfo;
    // 工件号
    workpiece: setInfo;
    // 目标位
    targetPosition: setInfo;
    // 挂组ID
    groupId: setInfo;
    // 错位槽号
    errorSlotNum: setInfo;
    // 溢出值
    overflowValue: setInfo;
    // 前进
    forward: setInfo;
    // 后退
    backward: setInfo;
    // 上升
    up: setInfo;
    // 下降
    down: setInfo;
    // 水平到位
    horizontalarrowed: setInfo;
    // 等待
    wait: setInfo;
    // 水平慢速标志
    horizontalSlowFlag: setInfo;
    // 自动生产标志
    autoProducingFlag: setInfo;
    // 暂停标志
    pauseFlag: setInfo;
    // 读工位错
    readStationError: setInfo;
  }

  export interface ControlState {
    type: string;
    label: string;
    btnType: string;
    loading: boolean;
    code: string;
  }

  export interface autoBtn {
    type: string;
    icon: string;
    btnType: string;
    key: string;
    title: string;
    show: boolean;
    ecCode: string;
  }

  export interface DevicePanelConfig {
    id: number;
    name: string;
    icon: string;
    funName: string;
    bgColor: string;
  }

  export interface craneControlConfig {
    id: number;
    name: string;
    logoInfo:
      | '等待标志'
      | '自动生产标志'
      | '暂停标志'
      | '水平慢速标志'
      | '手动生产标志';
    promptMessage: '提示消息' | '读工位错';
    params: craneParams;
    controlBtns: ControlState[];
  }

  export interface I_dimensionQueryData {
    id: string;
    ecCode: string;
    equipName: string;
    alarmClassification: string;
    equipID: string;
    content: string;
    equipFunName: string;
  }

  export interface I_standardResp {
    success: boolean;
    msg: string;
    data: any;
  }

  export interface cStph extends Vue {
    updateTaskInfo: (info: N_cStph.I_taskInfo) => void;
    lineConfig: ProductionLineConfig;
    craneControlConfig: N_cStph.craneControlConfig[];
    autoButtonPanel: N_cStph.autoBtn[];
    lineHeaderInfo: any;
    platingLine: any;
  }
}
